from typing import Dict, Type
from .base import BaseFundETF
from .sina import SinaFundETF


class FundETFFactory:
    """
    基金ETF数据获取工厂类
    """
    
    # 存储可用的基金ETF数据提供方
    _providers: Dict[str, Type[BaseFundETF]] = {
        "sina": SinaFundETF,
    }
    
    @classmethod
    def create(cls, source: str = "sina") -> BaseFundETF:
        """
        创建基金ETF数据获取实例
        
        Args:
            source: 数据源，默认为 "sina"
        
        Returns:
            BaseFundETF: 基金ETF数据获取实例
        
        Raises:
            ValueError: 如果指定的数据源不可用
        """
        if source not in cls._providers:
            available_sources = ", ".join(cls._providers.keys())
            raise ValueError(
                f"不支持的数据源: {source}。可用的数据源有: {available_sources}"
            )
        
        return cls._providers[source]()
    
    @classmethod
    def register_provider(cls, name: str, provider: Type[BaseFundETF]) -> None:
        """
        注册新的基金ETF数据提供方
        
        Args:
            name: 提供方名称
            provider: 提供方类
        """
        cls._providers[name] = provider
